/*
 * Copyright 2013 University of Padua, Italy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package it.unipd.dei.bd.icineasti.servlet.admin;

import it.unipd.dei.bd.icineasti.servlet.AbstractDatabaseServlet;

import it.unipd.dei.bd.icineasti.database.GetNoleggiDatabase;
import it.unipd.dei.bd.icineasti.database.CreaOAggiornaNoleggioDatabase;
import it.unipd.dei.bd.icineasti.resource.Noleggio;


import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Date;
import java.util.List;
import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import java.util.HashMap;
import java.util.Iterator;
import java.text.SimpleDateFormat;

import org.apache.commons.lang3.StringEscapeUtils; 

/**
 * Servlet per la gestione dei noleggi
 * 
 * @author Mattia Coccato
 *
 */
public class GestioneNoleggioServlet extends AbstractDatabaseServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		// imposta il tipo MIME della risposta
		res.setContentType("application/json;charset=utf-8");

		// ottiene un flusso di uscita per scrivere la risposta
		PrintWriter out = res.getWriter();

		Connection con = null;

		if (req.getParameter("codiceFilm") == null) return;

		try {
			con = DS.getConnection();
			Noleggio noleggio = null;
			Date dataInizio = new Date((new SimpleDateFormat("yyyy-MM-dd").parse(req.getParameter("dataInizio"))).getTime());
			int codiceFilm = Integer.parseInt(req.getParameter("codiceFilm"));


			noleggio = new GetNoleggiDatabase(con, codiceFilm).getSingoloDaDataInizio(dataInizio);
			
			//stampo array in formato json
			out.printf("{");
			
			out.printf("\"dataInizio\": \"%s\", ", new SimpleDateFormat("yyyy-MM-dd").format(noleggio.getDataInizio()));
			out.printf("\"dataFine\": \"%s\", ", new SimpleDateFormat("yyyy-MM-dd").format(noleggio.getDataFine()));
			out.printf("\"prezzo\": \"%s\", ", StringEscapeUtils.escapeHtml4(noleggio.getPrezzo().toString()));
			out.printf("\"fornitore\": \"%s\", ", StringEscapeUtils.escapeHtml4(noleggio.getPartitaIvaFornitore()));
			out.printf("\"IsIn2D\": \"%s\", ", String.valueOf(noleggio.getIsIn2D()));
			out.printf("\"IsIn3D\": \"%s\" ", String.valueOf(noleggio.getIsIn3D()));

			out.printf("}");

		} catch (NullPointerException e) {
			// messaggio d'errore
			out.printf("<p class=\"errore\">Impossibile creare la connessione al database.</p>");
		} catch (SQLException e) {
			// messaggio d'errore
			out.printf("<p class=\"errore\">Errore durante l'accesso al database: %s</p>",
			e.getMessage());
		} catch (Exception e) {
			// messaggio d'errore
			out.printf("<p class=\"errore\">Errore durante l'accesso al database: %s</p>",
			e.getMessage());
		}

		// assicura che tutto il contenuto sia inviato
		out.flush();

		// chiude il flusso di uscita
		// out.close();

	}


	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		res.setContentType("text/html");

		PrintWriter out = res.getWriter();

		String idAsString = null; 

		Connection conn;
		
		try {
			conn = DS.getConnection();

			int codiceFilm = Integer.parseInt(req.getParameter("codiceFilm"));
			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

			Date dataInizio = new Date(formatter.parse(req.getParameter("dataInizio")).getTime());
			Date dataFine = new Date(formatter.parse(req.getParameter("dataFine")).getTime());
			BigDecimal prezzo = new BigDecimal(req.getParameter("prezzo"));
			

			Noleggio noleggio = new Noleggio(codiceFilm, dataInizio, dataFine, prezzo, req.getParameter("fornitore"),
						(req.getParameter("isIn2D").toLowerCase().equals("true")),
						(req.getParameter("isIn3D").toLowerCase().equals("true")), null ); 

			CreaOAggiornaNoleggioDatabase operatore = new CreaOAggiornaNoleggioDatabase(conn, noleggio);
			
			if (req.getParameter("isNuovo").toLowerCase().equals("true")) {
				operatore.inserisciNoleggio();
				out.printf("<p class=\"ok\">Inserito correttamente!</p>");
			} else {
				operatore.aggiornaNoleggio();
				out.printf("<p class=\"ok\">Salvato correttamente!</p>");
			}
			
		} catch (Exception e) {
			out.printf("<p class\"errore\">Errore generale: %s</p>", e.getMessage());
			return;
		}
	}

}
